Forum - C/C++
- [SDL e OpenGL] Caricamento texture e profondità di colore
()
Newbie
Messaggi:
Iscritto:
|
Salve a tutti.
Nel mio codice ho bisogno di caricare una texture 2D da un file bitmap.
Riesco a caricarla ma i colori sono sfalsati, credo sia dovuto alla profondità di colore.
Vorrei impostarla a 32 bit.
Esiste una funzione (come per esempio la set_color_depth() di allegro ) che mi permette di impostare la profondità?
Ecco il codice, anche se non credo che serva xD
Codice sorgente - presumibilmente C# |
void fe_frame::OpenglFramework::loadOpenglTexture(fe_frame::graphicObject* object,string filename,string extension){ fe_out<<"Loading texture"<<endl; try{ object->image = IMG_Load(filename.c_str()); if(object->image == NULL){ string msg("Bad image : "+filename); throw error(1,msg); } }catch(error err){ err.printErr(); return; } try{ glGenTextures(1,&object->texture); if(&object->texture == NULL){ throw error(2,"Can't make texture"); }else{ glBindTexture(GL_TEXTURE_2D,object->texture); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); SDL_SetAlpha(object->image,0,0); if(extension == "PNG"){ glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,object->image->w,object->image->h,0, GL_RGBA,GL_UNSIGNED_BYTE,object->image->pixels); }else{ glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,object->image->w,object->image->h,0, GL_RGB,GL_UNSIGNED_BYTE,object->image->pixels); } } }catch(error err){ err.printErr(); return; } fe_out<<"Texture loaded"<<endl; }
|
Ultima modifica effettuata da il 21/11/2010 alle 16:28 |
|
napco (Normal User)
Pro
Messaggi: 64
Iscritto: 16/04/2010
|
Ciao! Esistono diversi metodi per farlo, con i loro pro e contro. Per evitare di scrivere troppe righe di codice preferivo usare SDL_GetRGBA() e memorizzare i valori di ogni pixel in un array, piuttosto che passare direttamente i pixels caricati in memoria dalle SDL.
Ultima modifica effettuata da napco il 21/11/2010 alle 16:55 |
|
GuglielmoS (Ex-Member)
Pro
Messaggi: 114
Iscritto: 27/11/2009
|
Prova utilizzando la SDL_DisplayFormat(surface), che ti ritorna una nuova SDL_Surface adattata al formato che stai utilizzando (in questo caso per la profondità del colore 32 bit).
Esempio:
Codice sorgente - presumibilmente Plain Text |
SDL_Surface *nuovaSurface = SDL_DisplayFormat(surface_da_adattare);
|
Ciao GuglielmoS
Ultima modifica effettuata da GuglielmoS il 21/11/2010 alle 16:58 |
|
Usa i commenti per chiedere spiegazioni o ringraziare le risposte. |
|
|